package fr.univ.projet.data;

import fr.univ.projet.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe permettant d'initialiser l'application 
 * 
 */
public class Base {

    private static Base base;
    private List<Joueur> lJoueur;
    private List<Jeu> lstJeu;
    // Garde en mémoire le joueur qui est connecté
    private Joueur joueurConnecte;
    private int dernierNumGrille;
    private int dernierNumJeu;

    /**
     * Nom de l'administrateur du jeu
     */
    public static final String NOM_ADMINISTRATEUR = "admin";
    
    /**
     * Initialisation des données de "base" du jeu
     */
    private Base() {
        // Initialisation du numéro de grille
        dernierNumGrille = 0;
        // Initialisation du numéro du jeu
        dernierNumJeu = 0;

        // Création de quelques joueurs
        Joueur j1 = new Joueur("Chris", "pass");
        Joueur j2 = new Joueur("David", "pass");
        Joueur j3 = new Joueur("Denis", "pass");
        Joueur j4 = new Joueur(NOM_ADMINISTRATEUR, "pass");

        lJoueur = new ArrayList<Joueur>();
        lJoueur.add(j1);
        lJoueur.add(j2);
        lJoueur.add(j3);
        lJoueur.add(j4);
    }

    public static Base getInstance() {
        if (base == null) {
            base = new Base();
        }

        return base;
    }

    public List<Joueur> getLJoueur() {
        return lJoueur;
    }

    public List<Jeu> getLstJeu() {
        return lstJeu;
    }

    public Joueur getJoueurConnecte() {
        return joueurConnecte;
    }

    public void setJoueurConnecte(Joueur j)
    {
        this.joueurConnecte = j;
    }
    
    /**
     * Permet de gérer un numéro de grille unique
     * 
     * @return un numéro de grille unique
     */
    public int getNumeroGrille() {
        dernierNumGrille = dernierNumGrille + 1;
        return dernierNumGrille;
    }

    /**
     * 
     * @return un numéro unique de jeu
     */
    public int getNumeroJeu() {
        dernierNumJeu = dernierNumJeu + 1;

        return dernierNumJeu;
    }

    /**
     * Initialise une instance de chaque jeu officiel
     */
    public void initJeuVersionOfficielle() {
            lstJeu = new ArrayList<Jeu>();

            // Création des deux jeux officiels
            Jeu jeuTolo = new Tolo(getNumeroJeu());
            Jeu jeuSuperTolo = new SuperTolo(getNumeroJeu());
            lstJeu.add(jeuTolo);
            lstJeu.add(jeuSuperTolo);
    }

    /**
     * Initialise une instance de chaque jeu de test
     */
    public void initJeuVersionTest() {
            Jeu jeuTest = new JeuTest(getNumeroJeu());
            Jeu jeuSuperTest = new SuperJeuTest(getNumeroJeu());

            lstJeu = new ArrayList<Jeu>();
            lstJeu.add(jeuTest);
            lstJeu.add(jeuSuperTest);
    }
}
